"""
__new__(cls):
    1、使用 类名() 创建对象时，Python 的解释器 首先 会 调用 __new__ 方法为对象 分配空间

    2、__new__ 是一个 由 object 基类提供的 内置的静态方法，主要作用有两个：
        在内存中为对象 分配空间
        返回 对象的引用
        Python 的解释器获得对象的 引用 后，将引用作为 第一个参数，传递给 __init__ 方法

    3、重写 __new__ 方法 的代码非常固定！
        重写 __new__ 方法 一定要 return super().__new__(cls)
        否则 Python 的解释器 得不到 分配了空间的 对象引用，就不会调用对象的初始化方法

"""


class Person(object):
    def __new__(cls, *args, **kwargs):
        print('__new__被调用执行了,cls的id值为{0}'.format(id(cls)))
        obj = super().__new__(cls)
        print('创建的对象的id为:{0}'.format(id(obj)))
        return obj

    def __init__(self, name, age):
        print('__init__被调用了，self的id值为:{0}'.format(id(self)))
        self.name = name
        self.age = age


print('object这个类对象的id为:{0}'.format(id(object)))
print('Person这个类对象的id为:{0}'.format(id(Person)))

# 创建Person类的实例对象
p1 = Person('张三', 20)
print('p1这个Person类的实例对象的id:{0}'.format(id(p1)))
